/*++
Copyright (c) 2007  Microsoft Corporation

Module Name:
    ndiswwan.h

Abstract:
    Header file for WWAN structures

Revision History:
    DATE            DESCRIPTION
    ------------        -----------
    23-FEB-2007     V0.40 Driver Model Compliant
    23-MAY-2007     V0.50 Driver Model Compliant
    02-APR-2008     V1.00 Driver Model Compliant
    15-FEB-2011     Incorporated device services

--*/

#ifndef __NDIS_WWAN_DECL__
#define __NDIS_WWAN_DECL__

typedef UCHAR NDIS_WWAN_MAC_ADDRESS[6];


///////////////////////////////////////////////////////////////////////////
//                           wwansvc requests                            //
///////////////////////////////////////////////////////////////////////////

#define NDIS_WWAN_DRIVER_CAPS_REVISION_1        1

typedef struct _NDIS_WWAN_DRIVER_CAPS {
    NDIS_OBJECT_HEADER  Header;
    WWAN_DRIVER_CAPS    DriverCaps;
} NDIS_WWAN_DRIVER_CAPS, *PNDIS_WWAN_DRIVER_CAPS;

#define NDIS_WWAN_SERVICE_ACTIVATION_REVISION_1     1

typedef struct _NDIS_WWAN_SERVICE_ACTIVATION {
    NDIS_OBJECT_HEADER      Header;
    WWAN_SERVICE_ACTIVATION ServiceActivation;
} NDIS_WWAN_SERVICE_ACTIVATION, *PNDIS_WWAN_SERVICE_ACTIVATION;

#define NDIS_WWAN_SET_RADIO_STATE_REVISION_1        1

typedef struct _NDIS_WWAN_SET_RADIO_STATE {
    NDIS_OBJECT_HEADER  Header;
    WWAN_RADIO      RadioAction;
} NDIS_WWAN_SET_RADIO_STATE, *PNDIS_WWAN_SET_RADIO_STATE;


#define NDIS_WWAN_SET_PIN_REVISION_1    1
#define NDIS_WWAN_SET_PIN_REVISION_2    2
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD || NDIS_SUPPORT_NDIS650)
#define NDIS_WWAN_SET_PIN_REVISION_3    3
#endif

typedef struct _NDIS_WWAN_SET_PIN {
    NDIS_OBJECT_HEADER  Header;
    WWAN_PIN_ACTION    PinAction;
} NDIS_WWAN_SET_PIN, *PNDIS_WWAN_SET_PIN;

typedef struct _NDIS_WWAN_SET_PIN_EX {
    NDIS_OBJECT_HEADER  Header;
    WWAN_PIN_ACTION     PinAction;
} NDIS_WWAN_SET_PIN_EX, *PNDIS_WWAN_SET_PIN_EX;

#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD || NDIS_SUPPORT_NDIS650)
typedef struct _NDIS_WWAN_SET_PIN_EX2 {
    NDIS_OBJECT_HEADER     Header;
    WWAN_PIN_ACTION_EX2    PinAction;
} NDIS_WWAN_SET_PIN_EX2, *PNDIS_WWAN_SET_PIN_EX2;
#endif

#define NDIS_WWAN_SET_PREFERRED_PROVIDERS_REVISION_1    1

typedef struct _NDIS_WWAN_SET_PREFERRED_PROVIDERS {
    NDIS_OBJECT_HEADER  Header;
    WWAN_LIST_HEADER    PreferredListHeader;
} NDIS_WWAN_SET_PREFERRED_PROVIDERS, *PNDIS_WWAN_SET_PREFERRED_PROVIDERS;

#define NDIS_WWAN_SET_REGISTER_STATE_REVISION_1     1
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD || NDIS_SUPPORT_NDIS650)
#define NDIS_WWAN_SET_REGISTER_STATE_REVISION_2     2
#endif

typedef struct _NDIS_WWAN_SET_REGISTER_STATE {
    NDIS_OBJECT_HEADER      Header;
    WWAN_SET_REGISTER_STATE SetRegisterState;
} NDIS_WWAN_SET_REGISTER_STATE, *PNDIS_WWAN_SET_REGISTER_STATE;

#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD || NDIS_SUPPORT_NDIS650)
typedef struct _NDIS_WWAN_SET_REGISTER_STATE_EX {
    NDIS_OBJECT_HEADER          Header;
    WWAN_SET_REGISTER_STATE_EX  SetRegisterState;
} NDIS_WWAN_SET_REGISTER_STATE_EX, *PNDIS_WWAN_SET_REGISTER_STATE_EX;
#endif

#define NDIS_WWAN_SET_SIGNAL_INDICATION_REVISION_1  1
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD || NDIS_SUPPORT_NDIS650)
#define NDIS_WWAN_SET_SIGNAL_INDICATION_REVISION_2  2
#endif

typedef struct _NDIS_WWAN_SET_SIGNAL_INDICATION {
    NDIS_OBJECT_HEADER          Header;
    WWAN_SET_SIGNAL_INDICATION  SignalIndication;
} NDIS_WWAN_SET_SIGNAL_INDICATION, *PNDIS_WWAN_SET_SIGNAL_INDICATION;

#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD || NDIS_SUPPORT_NDIS650)
typedef struct _NDIS_WWAN_SET_SIGNAL_INDICATION_EX {
    NDIS_OBJECT_HEADER              Header;
    WWAN_SET_SIGNAL_INDICATION_EX   SignalIndication;
} NDIS_WWAN_SET_SIGNAL_INDICATION_EX, *PNDIS_WWAN_SET_SIGNAL_INDICATION_EX;
#endif

#define NDIS_WWAN_SET_PACKET_SERVICE_REVISION_1     1

typedef struct _NDIS_WWAN_SET_PACKET_SERVICE {
    NDIS_OBJECT_HEADER      Header;
    WWAN_PACKET_SERVICE_ACTION  PacketServiceAction;
} NDIS_WWAN_SET_PACKET_SERVICE, *PNDIS_WWAN_SET_PACKET_SERVICE;

#define NDIS_WWAN_SET_PROVISIONED_CONTEXT_REVISION_1    1

typedef struct _NDIS_WWAN_SET_PROVISIONED_CONTEXT {
    NDIS_OBJECT_HEADER  Header;
    WWAN_SET_CONTEXT    ProvisionedContext;
} NDIS_WWAN_SET_PROVISIONED_CONTEXT, *PNDIS_WWAN_SET_PROVISIONED_CONTEXT;

#define NDIS_WWAN_SET_CONTEXT_STATE_REVISION_1      1
#if(NTDDI_VERSION >= NTDDI_WIN8 || NDIS_SUPPORT_NDIS630 )
#define NDIS_WWAN_SET_CONTEXT_STATE_REVISION_2      2
#endif

typedef struct _NDIS_WWAN_SET_CONTEXT_STATE {
    NDIS_OBJECT_HEADER      Header;
    WWAN_SET_CONTEXT_STATE  SetContextState;
} NDIS_WWAN_SET_CONTEXT_STATE, *PNDIS_WWAN_SET_CONTEXT_STATE;

#if(NTDDI_VERSION >= NTDDI_WIN8 || NDIS_SUPPORT_NDIS630 )
#define SIZEOF_NDIS_WWAN_SET_CONTEXT_STATE_REVISION_1               \
    ( FIELD_OFFSET(NDIS_WWAN_SET_CONTEXT_STATE,SetContextState) +   \
      RTL_SIZEOF_THROUGH_FIELD(WWAN_SET_CONTEXT_STATE,AuthType) )
#define SIZEOF_NDIS_WWAN_SET_CONTEXT_STATE_REVISION_2               \
    ( FIELD_OFFSET(NDIS_WWAN_SET_CONTEXT_STATE,SetContextState) +   \
      RTL_SIZEOF_THROUGH_FIELD(WWAN_SET_CONTEXT_STATE,IPType) )

#endif

#define NDIS_WWAN_SET_SMS_CONFIGURATION_REVISION_1  1

typedef struct _NDIS_WWAN_SET_SMS_CONFIGURATION {
    NDIS_OBJECT_HEADER      Header;
    WWAN_SET_SMS_CONFIGURATION  SetSmsConfiguration;
} NDIS_WWAN_SET_SMS_CONFIGURATION, *PNDIS_WWAN_SET_SMS_CONFIGURATION;

#define NDIS_WWAN_SMS_READ_REVISION_1           1

typedef struct _NDIS_WWAN_SMS_READ {
    NDIS_OBJECT_HEADER  Header;
    WWAN_SMS_READ   SmsRead;
} NDIS_WWAN_SMS_READ, *PNDIS_WWAN_SMS_READ;

#define NDIS_WWAN_SMS_SEND_REVISION_1           1

typedef struct _NDIS_WWAN_SMS_SEND {
    NDIS_OBJECT_HEADER  Header;
    WWAN_SMS_SEND   SmsSend;
} NDIS_WWAN_SMS_SEND, *PNDIS_WWAN_SMS_SEND;

#define NDIS_WWAN_SMS_DELETE_REVISION_1         1

typedef struct _NDIS_WWAN_SMS_DELETE {
    NDIS_OBJECT_HEADER  Header;
    WWAN_SMS_FILTER SmsFilter;
} NDIS_WWAN_SMS_DELETE, *PNDIS_WWAN_SMS_DELETE;

#if (NTDDI_VERSION >= NTDDI_WIN8 || NDIS_SUPPORT_NDIS630)

#define NDIS_WWAN_SET_HOME_PROVIDER_REVISION_1      1

typedef struct _NDIS_WWAN_SET_HOME_PROVIDER {
    NDIS_OBJECT_HEADER      Header;
    WWAN_PROVIDER2          HomeProvider;
} NDIS_WWAN_SET_HOME_PROVIDER, *PNDIS_WWAN_SET_HOME_PROVIDER;

#define NDIS_WWAN_SET_PREFERRED_MULTICARRIER_PROVIDERS_REVISION_1    1

typedef struct _NDIS_WWAN_SET_PREFERRED_MULTICARRIER_PROVIDERS {
    NDIS_OBJECT_HEADER  Header;
    WWAN_LIST_HEADER    PreferredListHeader;
} NDIS_WWAN_SET_PREFERRED_MULTICARRIER_PROVIDERS, *PNDIS_WWAN_SET_PREFERRED_MULTICARRIER_PROVIDERS;

#define NDIS_WWAN_GET_VISIBLE_PROVIDERS_REVISION_1      1

typedef struct _NDIS_WWAN_GET_VISIBLE_PROVIDERS {
    NDIS_OBJECT_HEADER  Header;
    WWAN_GET_VISIBLE_PROVIDERS  VisibleProviders;
} NDIS_WWAN_GET_VISIBLE_PROVIDERS, *PNDIS_WWAN_GET_VISIBLE_PROVIDERS;

#define SIZEOF_NDIS_WWAN_GET_VISIBLE_PROVIDERS_REVISION_1      sizeof(NDIS_WWAN_GET_VISIBLE_PROVIDERS)

#define NDIS_WWAN_USSD_REQUEST_REVISION_1 1

typedef struct _NDIS_WWAN_USSD_REQUEST {
  NDIS_OBJECT_HEADER         Header;
  WWAN_USSD_REQUEST          UssdRequest;
} NDIS_WWAN_USSD_REQUEST, *PNDIS_WWAN_USSD_REQUEST;

#define NDIS_WWAN_DEVICE_SERVICE_COMMAND_REVISION_1 1
#define SIZEOF_NDIS_WWAN_DEVICE_SERVICE_COMMAND_1   sizeof(NDIS_WWAN_DEVICE_SERVICE_COMMAND)

typedef struct _NDIS_WWAN_DEVICE_SERVICE_COMMAND {
  NDIS_OBJECT_HEADER Header;
  WWAN_DEVICE_SERVICE_COMMAND Command;
} NDIS_WWAN_DEVICE_SERVICE_COMMAND, *PNDIS_WWAN_DEVICE_SERVICE_COMMAND;

#define NDIS_WWAN_SUBSCRIBE_DEVICE_SERVICE_EVENTS_REVISION_1       1
#define SIZEOF_NDIS_WWAN_SUBSCRIBE_DEVICE_SERVICE_EVENTS_1         sizeof(NDIS_WWAN_SUBSCRIBE_DEVICE_SERVICE_EVENTS)

typedef struct _NDIS_WWAN_SUBSCRIBE_DEVICE_SERVICE_EVENTS {
  NDIS_OBJECT_HEADER Header;
  WWAN_LIST_HEADER DeviceServiceListHeader;
} NDIS_WWAN_SUBSCRIBE_DEVICE_SERVICE_EVENTS, *PNDIS_WWAN_SUBSCRIBE_DEVICE_SERVICE_EVENTS;

#define NDIS_WWAN_ENUMERATE_DEVICE_SERVICE_COMMANDS_REVISION_1 1
#define SIZEOF_NDIS_WWAN_ENUMERATE_DEVICE_SERVICE_COMMANDS_1   sizeof(NDIS_WWAN_ENUMERATE_DEVICE_SERVICE_COMMANDS)

typedef struct _NDIS_WWAN_ENUMERATE_DEVICE_SERVICE_COMMANDS {
  NDIS_OBJECT_HEADER Header;
  GUID DeviceServiceGuid;
} NDIS_WWAN_ENUMERATE_DEVICE_SERVICE_COMMANDS, *PNDIS_WWAN_ENUMERATE_DEVICE_SERVICE_COMMANDS;

#define NDIS_WWAN_SET_DEVICE_SERVICE_SESSION_REVISION_1     1
#define SIZEOF_NDIS_WWAN_SET_DEVICE_SERVICE_SESSION_1       sizeof(NDIS_WWAN_SET_DEVICE_SERVICE_SESSION)

typedef struct _NDIS_WWAN_DEVICE_SET_SERVICE_SESSION {
  NDIS_OBJECT_HEADER Header;
  WWAN_DEVICE_SERVICE_SESSION Session;
} NDIS_WWAN_SET_DEVICE_SERVICE_SESSION, *PNDIS_WWAN_SET_DEVICE_SERVICE_SESSION;

#define NDIS_WWAN_DEVICE_SERVICE_SESSION_INFO_REVISION_1    1
#define SIZEOF_NDIS_WWAN_DEVICE_SERVICE_SESSION_INFO_1      sizeof(NDIS_WWAN_DEVICE_SERVICE_SESSION_INFO)

typedef struct _NDIS_WWAN_DEVICE_SERVICE_SESSION_INFO {
  NDIS_OBJECT_HEADER Header;
  WWAN_STATUS uStatus;
  WWAN_DEVICE_SERVICE_SESSION Session;
} NDIS_WWAN_DEVICE_SERVICE_SESSION_INFO, *PNDIS_WWAN_DEVICE_SERVICE_SESSION_COMPLETE;

#define NDIS_WWAN_DEVICE_SERVICE_SESSION_WRITE_REVISION_1   1
#define SIZEOF_NDIS_WWAN_DEVICE_SERVICE_SESSION_WRITE_1     sizeof(NDIS_WWAN_DEVICE_SERVICE_SESSION_WRITE)

typedef struct _NDIS_WWAN_DEVICE_SERVICE_SESSION_WRITE {
  NDIS_OBJECT_HEADER Header;
  WWAN_DEVICE_SERVICE_SESSION_WRITE WriteData;
} NDIS_WWAN_DEVICE_SERVICE_SESSION_WRITE, *PNDIS_WWAN_DEVICE_SERVICE_SESSION_WRITE;

#define NDIS_WWAN_MAC_PARAMETERS_REVISION_1   1
#define SIZEOF_NDIS_WWAN_MAC_PARAMETERS_1     sizeof(NDIS_WWAN_MAC_PARAMETERS)

typedef struct _NDIS_WWAN_MAC_PARAMETERS{
    NDIS_OBJECT_HEADER Header;  
} NDIS_WWAN_MAC_PARAMETERS, *PNDIS_WWAN_MAC_PARAMETERS;

typedef struct _NDIS_WWAN_MAC_INFO  
{  
    ULONG uReserved;  
    ULONG uNdisPortNumber;  
    NDIS_WWAN_MAC_ADDRESS MacAddr;  
} NDIS_WWAN_MAC_INFO, * PNDIS_WWAN_MAC_INFO;

#endif

#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD || NDIS_SUPPORT_NDIS650)

#define NDIS_WWAN_UICC_FILE_PATH_REVISION_1         1

typedef struct _NDIS_WWAN_UICC_FILE_PATH {
    NDIS_OBJECT_HEADER Header;
    WWAN_UICC_FILE_PATH UiccFilePath;
} NDIS_WWAN_UICC_FILE_PATH, *PNDIS_WWAN_UICC_FILE_PATH;

#define NDIS_WWAN_UICC_ACCESS_BINARY_REVISION_1     1

typedef struct _NDIS_WWAN_UICC_ACCESS_BINARY {
    NDIS_OBJECT_HEADER Header;
    WWAN_UICC_ACCESS_BINARY UiccAccessBinary;
} NDIS_WWAN_UICC_ACCESS_BINARY, *PNDIS_WWAN_UICC_ACCESS_BINARY;

#define NDIS_WWAN_UICC_ACCESS_RECORD_REVISION_1     1

typedef struct _NDIS_WWAN_UICC_ACCESS_RECORD {
    NDIS_OBJECT_HEADER Header;
    WWAN_UICC_ACCESS_RECORD UiccAccessRecord;
} NDIS_WWAN_UICC_ACCESS_RECORD, *PNDIS_WWAN_UICC_ACCESS_RECORD;

#define NDIS_WWAN_MBIM_VERSION_REVISION_1       1
#define SIZEOF_NDIS_WWAN_MBIM_VERSION_1         sizeof(NDIS_WWAN_MBIM_VERSION)

typedef struct _NDIS_WWAN_MBIM_VERSION {
    NDIS_OBJECT_HEADER Header;
    WWAN_MBIM_VERSION MbimVersion; 
} NDIS_WWAN_MBIM_VERSION, *PNDIS_WWAN_MBIM_VERSION;

#define NDIS_WWAN_SET_DEVICE_SLOT_MAPPING_INFO_REVISION_1   1

typedef struct _NDIS_WWAN_SET_DEVICE_SLOT_MAPPING_INFO {
    NDIS_OBJECT_HEADER              Header;
    WWAN_DEVICE_SLOT_MAPPING_INFO   SetDeviceSlotMappingInfo;
} NDIS_WWAN_SET_DEVICE_SLOT_MAPPING_INFO, *PNDIS_WWAN_SET_DEVICE_SLOT_MAPPING_INFO;

#define NDIS_WWAN_GET_SLOT_INFO_REVISION_1          1

typedef struct _NDIS_WWAN_GET_SLOT_INFO {
    NDIS_OBJECT_HEADER   Header;
    WWAN_GET_SLOT_INFO   GetSlotInfo;
} NDIS_WWAN_GET_SLOT_INFO, *PNDIS_WWAN_GET_SLOT_INFO;

#define NDIS_WWAN_SET_DEVICE_BINDINGS_INFO_REVISION_1   1

typedef struct _NDIS_WWAN_SET_DEVICE_BINDINGS_INFO {
    NDIS_OBJECT_HEADER          Header;
    WWAN_DEVICE_BINDINGS_INFO   SetDeviceBindingsInfo;
} NDIS_WWAN_SET_DEVICE_BINDINGS_INFO, *PNDIS_WWAN_SET_DEVICE_BINDINGS_INFO;

#define NDIS_WWAN_SET_IMS_VOICE_STATE_REVISION_1    1

typedef struct _NDIS_WWAN_SET_IMS_VOICE_STATE {
    NDIS_OBJECT_HEADER          Header;
    WWAN_SET_IMS_VOICE_STATE    SetImsVoiceState;
} NDIS_WWAN_SET_IMS_VOICE_STATE, *PNDIS_WWAN_SET_IMS_VOICE_STATE;

#define NDIS_WWAN_LOCATION_TRIGGER_MODE_REVISION_1  1

typedef struct _NDIS_WWAN_LOCATION_TRIGGER_MODE {
    NDIS_OBJECT_HEADER          Header;
    WWAN_SET_LOCATION_STATE     SetLocationState;
} NDIS_WWAN_LOCATION_TRIGGER_MODE, *PNDIS_WWAN_LOCATION_TRIGGER_MODE;

#define NDIS_WWAN_NETWORK_IDLE_HINT_REVISION_1  1
#define SIZEOF_NDIS_WWAN_NETWORK_IDLE_HINT_1   sizeof(NDIS_WWAN_NETWORK_IDLE_HINT)

typedef struct _NDIS_WWAN_NETWORK_IDLE_HINT {
    NDIS_OBJECT_HEADER      Header;
    WWAN_NETWORK_IDLE_HINT  IdleHint;
} NDIS_WWAN_NETWORK_IDLE_HINT, *PNDIS_WWAN_NETWORK_IDLE_HINT;

#endif // (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)

///////////////////////////////////////////////////////////////////////////
//                    device indications and responses                   //
///////////////////////////////////////////////////////////////////////////
#define NDIS_WWAN_DEVICE_CAPS_REVISION_1        1
#define NDIS_WWAN_DEVICE_CAPS_REVISION_2        2
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD || NDIS_SUPPORT_NDIS650)
#define NDIS_WWAN_DEVICE_CAPS_REVISION_3        3
#endif

typedef struct _NDIS_WWAN_DEVICE_CAPS {
    NDIS_OBJECT_HEADER    Header;
    WWAN_STATUS           uStatus;
    WWAN_DEVICE_CAPS      DeviceCaps;
} NDIS_WWAN_DEVICE_CAPS, *PNDIS_WWAN_DEVICE_CAPS;

#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD || NDIS_SUPPORT_NDIS650)
typedef struct _NDIS_WWAN_DEVICE_CAPS_EX2 {
    NDIS_OBJECT_HEADER    Header;
    WWAN_STATUS           uStatus;
    WWAN_DEVICE_CAPS_EX2  DeviceCaps;
} NDIS_WWAN_DEVICE_CAPS_EX2, *PNDIS_WWAN_DEVICE_CAPS_EX2;
#endif

#define NDIS_WWAN_READY_INFO_REVISION_1         1

typedef struct _NDIS_WWAN_READY_INFO {
    NDIS_OBJECT_HEADER  Header;
    WWAN_READY_INFO ReadyInfo;
} NDIS_WWAN_READY_INFO, *PNDIS_WWAN_READY_INFO;

#define NDIS_WWAN_SERVICE_ACTIVATION_STATUS_REVISION_1  1

typedef struct _NDIS_WWAN_SERVICE_ACTIVATION_STATUS {
    NDIS_OBJECT_HEADER              Header;
    WWAN_STATUS                     uStatus;
    WWAN_SERVICE_ACTIVATION_STATUS  ServiceActivationStatus;
} NDIS_WWAN_SERVICE_ACTIVATION_STATUS, *PNDIS_WWAN_SERVICE_ACTIVATION_STATUS;

#define NDIS_WWAN_VENDOR_SPECIFIC_REVISION_1    1

typedef struct _NDIS_WWAN_VENDOR_SPECIFIC {
    NDIS_OBJECT_HEADER        Header;
    WWAN_VENDOR_SPECIFIC      VendorSpecificData;
} NDIS_WWAN_VENDOR_SPECIFIC, *PNDIS_WWAN_VENDOR_SPECIFIC;

#define NDIS_WWAN_RADIO_STATE_REVISION_1        1

typedef struct _NDIS_WWAN_RADIO_STATE {
    NDIS_OBJECT_HEADER  Header;
    WWAN_STATUS     uStatus;
    WWAN_RADIO_STATE    RadioState;
} NDIS_WWAN_RADIO_STATE, *PNDIS_WWAN_RADIO_STATE;

#define NDIS_WWAN_PIN_INFO_REVISION_1           1

typedef struct _NDIS_WWAN_PIN_INFO {
    NDIS_OBJECT_HEADER  Header;
    WWAN_STATUS     uStatus;
    WWAN_PIN_INFO   PinInfo;
} NDIS_WWAN_PIN_INFO, *PNDIS_WWAN_PIN_INFO;

#define NDIS_WWAN_PIN_LIST_REVISION_1           1

typedef struct _NDIS_WWAN_PIN_LIST {
    NDIS_OBJECT_HEADER  Header;
    WWAN_STATUS     uStatus;
    WWAN_PIN_LIST   PinList;
} NDIS_WWAN_PIN_LIST, *PNDIS_WWAN_PIN_LIST;

#define NDIS_WWAN_HOME_PROVIDER_REVISION_1      1

typedef struct _NDIS_WWAN_HOME_PROVIDER {
    NDIS_OBJECT_HEADER  Header;
    WWAN_STATUS     uStatus;
    WWAN_PROVIDER   Provider;
} NDIS_WWAN_HOME_PROVIDER, *PNDIS_WWAN_HOME_PROVIDER;

#define NDIS_WWAN_PREFERRED_PROVIDERS_REVISION_1    1

typedef struct _NDIS_WWAN_PREFERRED_PROVIDERS {
    NDIS_OBJECT_HEADER  Header;
    WWAN_STATUS     uStatus;
    WWAN_LIST_HEADER    PreferredListHeader;
} NDIS_WWAN_PREFERRED_PROVIDERS, *PNDIS_WWAN_PREFERRED_PROVIDERS;

#define NDIS_WWAN_VISIBLE_PROVIDERS_REVISION_1      1

typedef struct _NDIS_WWAN_VISIBLE_PROVIDERS {
    NDIS_OBJECT_HEADER  Header;
    WWAN_STATUS     uStatus;
    WWAN_LIST_HEADER    VisibleListHeader;
} NDIS_WWAN_VISIBLE_PROVIDERS, *PNDIS_WWAN_VISIBLE_PROVIDERS;

#define NDIS_WWAN_REGISTRATION_STATE_REVISION_1     1
#define NDIS_WWAN_REGISTRATION_STATE_REVISION_2     2
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD || NDIS_SUPPORT_NDIS650)
#define NDIS_WWAN_REGISTRATION_STATE_REVISION_3     3
#endif

typedef struct _NDIS_WWAN_REGISTRATION_STATE {
    NDIS_OBJECT_HEADER      Header;
    WWAN_STATUS             uStatus;
    WWAN_REGISTRATION_STATE RegistrationState;
} NDIS_WWAN_REGISTRATION_STATE, *PNDIS_WWAN_REGISTRATION_STATE;

#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD || NDIS_SUPPORT_NDIS650)
typedef struct _NDIS_WWAN_REGISTRATION_STATE_INFOS_EX {
    NDIS_OBJECT_HEADER              Header;
    WWAN_STATUS                     uStatus;
    WWAN_REGISTRATION_STATE_INFOS   RegistrationStateInfos;
} NDIS_WWAN_REGISTRATION_STATE_INFOS_EX, *PNDIS_WWAN_REGISTRATION_STATE_INFOS_EX;
#endif

#define NDIS_WWAN_SIGNAL_STATE_REVISION_1       1
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD || NDIS_SUPPORT_NDIS650)
#define NDIS_WWAN_SIGNAL_STATE_REVISION_2       2
#endif

typedef struct _NDIS_WWAN_SIGNAL_STATE {
    NDIS_OBJECT_HEADER  Header;
    WWAN_STATUS         uStatus;
    WWAN_SIGNAL_STATE   SignalState;
} NDIS_WWAN_SIGNAL_STATE, *PNDIS_WWAN_SIGNAL_STATE;

#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD || NDIS_SUPPORT_NDIS650)
typedef struct _NDIS_WWAN_SIGNAL_STATE_INFOS_EX {
    NDIS_OBJECT_HEADER      Header;
    WWAN_STATUS             uStatus;
    WWAN_SIGNAL_STATE_INFOS SignalStateInfos;
} NDIS_WWAN_SIGNAL_STATE_INFOS_EX, *PNDIS_WWAN_SIGNAL_STATE_INFOS_EX;
#endif

#define NDIS_WWAN_PACKET_SERVICE_STATE_REVISION_1   1

typedef struct _NDIS_WWAN_PACKET_SERVICE_STATE {
    NDIS_OBJECT_HEADER  Header;
    WWAN_STATUS     uStatus;
    WWAN_PACKET_SERVICE PacketService;
} NDIS_WWAN_PACKET_SERVICE_STATE, *PNDIS_WWAN_PACKET_SERVICE_STATE;

#define NDIS_WWAN_CONTEXT_STATE_REVISION_1      1
#if(NTDDI_VERSION >= NTDDI_WIN8 || NDIS_SUPPORT_NDIS630 )
#define NDIS_WWAN_CONTEXT_STATE_REVISION_2      2
#endif

typedef struct _NDIS_WWAN_CONTEXT_STATE {
    NDIS_OBJECT_HEADER  Header;
    WWAN_STATUS     uStatus;
    WWAN_CONTEXT_STATE  ContextState;
} NDIS_WWAN_CONTEXT_STATE, *PNDIS_WWAN_CONTEXT_STATE;

#define SIZEOF_NDIS_WWAN_CONTEXT_STATE_REVISION_1                   \
    ( FIELD_OFFSET(NDIS_WWAN_CONTEXT_STATE,ContextState) +          \
      RTL_SIZEOF_THROUGH_FIELD(WWAN_CONTEXT_STATE,VoiceCallState) )
#define SIZEOF_NDIS_WWAN_CONTEXT_STATE_REVISION_2                   \
    ( FIELD_OFFSET(NDIS_WWAN_CONTEXT_STATE,ContextState) +          \
      RTL_SIZEOF_THROUGH_FIELD(WWAN_CONTEXT_STATE,IPType) )


#define NDIS_WWAN_PROVISIONED_CONTEXTS_REVISION_1   1

typedef struct _NDIS_WWAN_PROVISIONED_CONTEXTS {
    NDIS_OBJECT_HEADER  Header;
    WWAN_STATUS     uStatus;
    WWAN_LIST_HEADER    ContextListHeader;
} NDIS_WWAN_PROVISIONED_CONTEXTS, *PNDIS_WWAN_PROVISIONED_CONTEXTS;

#define NDIS_WWAN_SMS_CONFIGURATION_REVISION_1      1

typedef struct _NDIS_WWAN_SMS_CONFIGURATION {
    NDIS_OBJECT_HEADER      Header;
    WWAN_STATUS         uStatus;
    WWAN_SMS_CONFIGURATION  SmsConfiguration;
} NDIS_WWAN_SMS_CONFIGURATION, *PNDIS_WWAN_SMS_CONFIGURATION;

#define NDIS_WWAN_SMS_RECEIVE_REVISION_1        1

typedef struct _NDIS_WWAN_SMS_RECEIVE {
    NDIS_OBJECT_HEADER  Header;
    WWAN_STATUS     uStatus;
    WWAN_LIST_HEADER    SmsListHeader;
} NDIS_WWAN_SMS_RECEIVE, *PNDIS_WWAN_SMS_RECEIVE;

#define NDIS_WWAN_SMS_SEND_STATUS_REVISION_1        1

typedef struct _NDIS_WWAN_SMS_SEND_STATUS {
    NDIS_OBJECT_HEADER  Header;
    WWAN_STATUS     uStatus;
    ULONG       MessageReference;
} NDIS_WWAN_SMS_SEND_STATUS, *PNDIS_WWAN_SMS_SEND_STATUS;

#define NDIS_WWAN_SMS_DELETE_STATUS_REVISION_1      1

typedef struct _NDIS_WWAN_SMS_DELETE_STATUS {
    NDIS_OBJECT_HEADER  Header;
    WWAN_STATUS     uStatus;
} NDIS_WWAN_SMS_DELETE_STATUS, *PNDIS_WWAN_SMS_DELETE_STATUS;

#define NDIS_WWAN_SMS_STATUS_REVISION_1         1

typedef struct _NDIS_WWAN_SMS_STATUS {
    NDIS_OBJECT_HEADER  Header;
    WWAN_STATUS     uStatus;
    WWAN_SMS_STATUS SmsStatus;
} NDIS_WWAN_SMS_STATUS, *PNDIS_WWAN_SMS_STATUS;

#if (NTDDI_VERSION >= NTDDI_WIN8 || NDIS_SUPPORT_NDIS630)

#define NDIS_WWAN_SUPPORTED_DEVICE_SERVICES_REVISION_1  1
#define SIZEOF_NDIS_WWAN_SUPPORTED_DEVICE_SERVICES_1              sizeof(NDIS_WWAN_SUPPORTED_DEVICE_SERVICES)

typedef struct _NDIS_WWAN_SUPPORTED_DEVICE_SERVICES {
  NDIS_OBJECT_HEADER Header;
  WWAN_STATUS uStatus;
  WWAN_SUPPORTED_DEVICE_SERVICES DeviceServices;
} NDIS_WWAN_SUPPORTED_DEVICE_SERVICES, *PNDIS_WWAN_SUPPORTED_DEVICE_SERVICES;

#define NDIS_WWAN_DEVICE_SERVICE_RESPONSE_REVISION_1    1
#define SIZEOF_NDIS_WWAN_DEVICE_SERVICE_RESPONSE_1      sizeof(NDIS_WWAN_DEVICE_SERVICE_RESPONSE)

typedef struct _NDIS_WWAN_DEVICE_SERVICE_RESPONSE {
   NDIS_OBJECT_HEADER Header;
   WWAN_STATUS uStatus;
   WWAN_DEVICE_SERVICE_RESPONSE Response;
} NDIS_WWAN_DEVICE_SERVICE_RESPONSE, *PNDIS_WWAN_DEVICE_SERVICE_RESPONSE;

#define NDIS_WWAN_DEVICE_SERVICE_EVENT_REVISION_1       1
#define SIZEOF_NDIS_WWAN_DEVICE_SERVICE_EVENT_1         sizeof(NDIS_WWAN_DEVICE_SERVICE_EVENT)

typedef struct _NDIS_WWAN_DEVICE_SERVICE_EVENT {
  NDIS_OBJECT_HEADER Header;
  WWAN_DEVICE_SERVICE_EVENT Event;
} NDIS_WWAN_DEVICE_SERVICE_EVENT, *PNDIS_WWAN_DEVICE_SERVICE_EVENT;

#define NDIS_WWAN_DEVICE_SERVICE_SUBSCRIPTION_REVISION_1       1
#define SIZEOF_NDIS_WWAN_DEVICE_SERVICE_SUBSCRIPTION_1         sizeof(NDIS_WWAN_DEVICE_SERVICE_SUBSCRIPTION)

typedef struct _NDIS_WWAN_DEVICE_SERVICE_SUBSCRIPTION {
  NDIS_OBJECT_HEADER Header;
  WWAN_STATUS uStatus;
  WWAN_LIST_HEADER DeviceServiceListHeader;
} NDIS_WWAN_DEVICE_SERVICE_SUBSCRIPTION, *PNDIS_WWAN_DEVICE_SERVICE_SUBSCRIPTION;

#define NDIS_WWAN_HOME_PROVIDER_REVISION_2      2

typedef struct _NDIS_WWAN_HOME_PROVIDER2 {
    NDIS_OBJECT_HEADER  Header;
    WWAN_STATUS     uStatus;
    WWAN_PROVIDER2  Provider;
} NDIS_WWAN_HOME_PROVIDER2, *PNDIS_WWAN_HOME_PROVIDER2;

#define NDIS_WWAN_USSD_EVENT_REVISION_1 1

typedef struct _NDIS_WWAN_USSD_EVENT {
  NDIS_OBJECT_HEADER     Header;
  WWAN_STATUS            uStatus;
  WWAN_USSD_EVENT        UssdEvent;
} NDIS_WWAN_USSD_EVENT, *PNDIS_WWAN_USSD_EVENT;

#define NDIS_WWAN_DEVICE_SERVICE_SUPPORTED_COMMANDS_REVISION_1       1
#define SIZEOF_NDIS_WWAN_DEVICE_SERVICE_SUPPORTED_COMMANDS_1         sizeof(NDIS_WWAN_DEVICE_SERVICE_SUPPORTED_COMMANDS)

typedef struct _NDIS_WWAN_DEVICE_SERVICE_SUPPORTED_COMMANDS {
  NDIS_OBJECT_HEADER Header;
  WWAN_STATUS uStatus;
  WWAN_DEVICE_SERVICE_SUPPORTED_COMMANDS SupportedCommands; 
} NDIS_WWAN_DEVICE_SERVICE_SUPPORTED_COMMANDS, *PNDIS_WWAN_DEVICE_SERVICE_SUPPORTED_COMMANDS;

#define NDIS_WWAN_AUTH_CHALLENGE_REVISION_1     1

typedef struct _NDIS_WWAN_AUTH_CHALLENGE {
    NDIS_OBJECT_HEADER        Header;
    WWAN_AUTH_CHALLENGE       AuthChallenge;
} NDIS_WWAN_AUTH_CHALLENGE, *PNDIS_WWAN_AUTH_CHALLENGE;

#define NDIS_WWAN_AUTH_RESPONSE_REVISION_1      1

typedef struct _NDIS_WWAN_AUTH_RESPONSE {
    NDIS_OBJECT_HEADER        Header;
    WWAN_STATUS           uStatus;
    WWAN_AUTH_RESPONSE       AuthResponse;
} NDIS_WWAN_AUTH_RESPONSE, *PNDIS_WWAN_AUTH_RESPONSE;

#define NDIS_WWAN_PREFERRED_MULTICARRIER_PROVIDERS_REVISION_1    1

typedef struct _NDIS_WWAN_PREFERRED_MULTICARRIER_PROVIDERS {
    NDIS_OBJECT_HEADER  Header;
    WWAN_STATUS     uStatus;
    WWAN_LIST_HEADER    PreferredListHeader;
} NDIS_WWAN_PREFERRED_MULTICARRIER_PROVIDERS, *PNDIS_WWAN_PREFERRED_MULTICARRIER_PROVIDERS;

#define NDIS_WWAN_DEVICE_SERVICE_SESSION_WRITE_COMPLETE_REVISION_1  1
#define SIZEOF_NDIS_WWAN_DEVICE_SERVICE_SESSION_WRITE_COMPLETE_1    sizeof(NDIS_WWAN_DEVICE_SERVICE_SESSION_WRITE_COMPLETE)

typedef struct _NDIS_WWAN_DEVICE_SERVICE_SESSION_WRITE_COMPLETE {
   NDIS_OBJECT_HEADER Header;
   WWAN_STATUS uStatus;
} NDIS_WWAN_DEVICE_SERVICE_SESSION_WRITE_COMPLETE, *PNDIS_WWAN_DEVICE_SERVICE_SESSION_WRITE_COMPLETE;

#define NDIS_WWAN_DEVICE_SERVICE_SESSION_READ_REVISION_1    1
#define SIZEOF_NDIS_WWAN_DEVICE_SERVICE_SESSION_READ_1      sizeof(NDIS_WWAN_DEVICE_SERVICE_SESSION_READ)

typedef struct _NDIS_WWAN_DEVICE_SERVICE_SESSION_READ {
  NDIS_OBJECT_HEADER Header;
  WWAN_DEVICE_SERVICE_SESSION_READ ReadData;
} NDIS_WWAN_DEVICE_SERVICE_SESSION_READ, *PNDIS_WWAN_DEVICE_SERVICE_SESSION_READ;

#define NDIS_WWAN_IP_ADDRESS_STATE_REVISION_1    1
#define SIZEOF_NDIS_WWAN_IP_ADDRESS_STATE_1     sizeof(NDIS_WWAN_IP_ADDRESS_STATE)

typedef struct _NDIS_WWAN_IP_ADDRESS_STATE
{
   NDIS_OBJECT_HEADER           Header;   
   WWAN_IP_ADDRESS_STATE        WwanIpAddressState;
} NDIS_WWAN_IP_ADDRESS_STATE, *PNDIS_WWAN_IP_ADDRESS_STATE;

#endif

#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD || NDIS_SUPPORT_NDIS650)
#define NDIS_WWAN_UICC_FILE_STATUS_REVISION_1       1

typedef struct _NDIS_WWAN_UICC_FILE_STATUS {
    NDIS_OBJECT_HEADER Header;
    WWAN_STATUS uStatus;
    WWAN_UICC_FILE_STATUS UiccFileStatus;
} NDIS_WWAN_UICC_FILE_STATUS, *PNDIS_WWAN_UICC_FILE_STATUS;

#define NDIS_WWAN_UICC_RESPONSE_REVISION_1          1

typedef struct _NDIS_WWAN_UICC_RESPONSE {
    NDIS_OBJECT_HEADER Header;
    WWAN_STATUS uStatus;
    WWAN_UICC_RESPONSE UiccResponse;
} NDIS_WWAN_UICC_RESPONSE, *PNDIS_WWAN_UICC_RESPONSE;

#define NDIS_WWAN_SYS_CAPS_INFO_REVISION_1          1

typedef struct _NDIS_WWAN_SYS_CAPS_INFO {
    NDIS_OBJECT_HEADER  Header;
    WWAN_STATUS         uStatus;
    WWAN_SYS_CAPS_INFO  SysCapsInfo;
} NDIS_WWAN_SYS_CAPS_INFO, *PNDIS_WWAN_SYS_CAPS_INFO;

#define NDIS_WWAN_DEVICE_SLOT_MAPPING_INFO_REVISION_1          1

typedef struct _NDIS_WWAN_DEVICE_SLOT_MAPPING_INFO {
    NDIS_OBJECT_HEADER              Header;
    WWAN_STATUS                     uStatus;
    WWAN_DEVICE_SLOT_MAPPING_INFO   DeviceSlotMappingInfo;
} NDIS_WWAN_DEVICE_SLOT_MAPPING_INFO, *PNDIS_WWAN_DEVICE_SLOT_MAPPING_INFO;

#define NDIS_WWAN_SLOT_INFO_REVISION_1              1

typedef struct _NDIS_WWAN_SLOT_INFO {
    NDIS_OBJECT_HEADER  Header;
    WWAN_STATUS         uStatus;
    WWAN_SLOT_INFO      SlotInfo;
} NDIS_WWAN_SLOT_INFO, *PNDIS_WWAN_SLOT_INFO;

#define NDIS_WWAN_DEVICE_BINDINGS_INFO_REVISION_1   1

typedef struct _NDIS_WWAN_DEVICE_BINDINGS_INFO {
    NDIS_OBJECT_HEADER          Header;
    WWAN_STATUS                 uStatus;
    WWAN_DEVICE_BINDINGS_INFO   DeviceBindingsInfo;
} NDIS_WWAN_DEVICE_BINDINGS_INFO, *PNDIS_WWAN_DEVICE_BINDINGS_INFO;

#define NDIS_WWAN_IMS_VOICE_STATE_REVISION_1        1

typedef struct _NDIS_WWAN_IMS_VOICE_STATE {
    NDIS_OBJECT_HEADER      Header;
    WWAN_STATUS             uStatus;
    WWAN_IMS_VOICE_STATE    ImsVoiceState;
} NDIS_WWAN_IMS_VOICE_STATE, *PNDIS_WWAN_IMS_VOICE_STATE;

#define NDIS_WWAN_LOCATION_STATE_INFO_REVISION_1    1

typedef struct _NDIS_WWAN_LOCATION_STATE_INFO {
    NDIS_OBJECT_HEADER          Header;
    WWAN_STATUS                 uStatus;
    WWAN_LOCATION_STATE_INFO    LocationStateInfo;
} NDIS_WWAN_LOCATION_STATE_INFO, *PNDIS_WWAN_LOCATION_STATE_INFO;

#define NDIS_WWAN_NITZ_INFO_REVISION_1              1

typedef struct _NDIS_WWAN_NITZ_INFO {
    NDIS_OBJECT_HEADER  Header;
    WWAN_STATUS         uStatus;
    WWAN_NITZ_INFO      NitzInfo;
} NDIS_WWAN_NITZ_INFO, *PNDIS_WWAN_NITZ_INFO;

#endif // (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)

#endif //__NDIS_WWAN_DECL__
